package org.aliwo.exit;

/**
 * @author xuyayuan
 * @data 2021年06月12日
 * 通知线程终止
 * 基本说明：
 * 一：当线程完成任务后，会自动退出。
 * 二：可以通过使用变量来控制run方法退出的方式停止线程，即通知方式。
 */
public class ThreadExit {
    public static void main(String[] args) throws InterruptedException {
        Person p = new Person();
        p.start();
        // 如果希望main线程控制 p线程的终止，必须可以修改loop
        // 让p 退出run方法，从而终止p线程
        System.out.println("主线程休眠 3秒。。。。");
        Thread.sleep(1000);
        // 通过在主线程中，控制子线程的运行
        p.setLoop(false);
    }
}

class Person extends Thread {

    private int count = 0;

    // 设置一个控制变量，
    private Boolean loop = true;

    public void setLoop(Boolean loop) {
        this.loop = loop;
    }

    @Override
    public void run() {
        System.out.println("loop" + loop);
        while (loop) {
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("子线程在运行中。。。。" + (++count));
        }

    }
}
